#include "myVector.hpp"
#include "myList.hpp"
#include "myStack.hpp"
#include "myQueue.hpp"

#include <iostream>
#include <unistd.h>

using namespace myVector;
using namespace myList;
using namespace myStack;
using namespace myQueue;
void VectorTest()
{
        Vector<int> my_vec;
    my_vec.push_back(1);
                for(const auto& e : my_vec)
                {
                    std::cout << e << " ";
                }
                std::cout << std::endl;
                sleep(1);
    my_vec.push_back(2);
                for(const auto& e : my_vec)
                {
                    std::cout << e << " ";
                }
                std::cout << std::endl;
                sleep(1);
    my_vec.push_back(3);
                for(const auto& e : my_vec)
                {
                    std::cout << e << " ";
                }
                std::cout << std::endl;
                sleep(1);
    my_vec.push_back(4);
                for(const auto& e : my_vec)
                {
                    std::cout << e << " ";
                }
                std::cout << std::endl;
                sleep(1);
    my_vec.push_back(5);
                for(const auto& e : my_vec)
                {
                    std::cout << e << " ";
                }
                std::cout << std::endl;
                sleep(1);
    my_vec.push_back(6);
                for(const auto& e : my_vec)
                {
                    std::cout << e << " ";
                }
                std::cout << std::endl;
                sleep(10);
}
void ListTest()
{
    List<int> list;
    list.push_back(1);
    list.push_back(2);
    list.push_back(3);
    // list.pop_back(); 
    list.pop_front(); // **
    list.push_front(5); // **
    for(const auto& e : list) 
    {
        std::cout << e << " ";
    }
    std::cout << std::endl;
}
void StackTest()
{
    Stack<int> st;
    st.push(4);
    st.push(8);
    st.push(7);
    while(!st.empty())
    {
        std::cout << st.top() << " ";
        st.pop();
    }
    std::cout << std::endl;
}
void QueueTest()
{
    Queue<int> que;
    que.push(2);
    que.push(3);
    que.push(4);
    que.push(1);
    while(!que.empty())
    {
        std::cout << que.size() << " ";
        que.pop();
    }
    std::cout << std::endl;
}
int main()
{
    // ListTest();
    // StackTest();
    QueueTest();
    return 0;
}